// pages/handset/handset.js
const gaiaManager = require('../../utils/gaiaManager.js').gaiaManager
const bluetoothManager = require('../../utils/bluetooth.js').bluetoothManager

Page({
  data: {
    // 页面状态
    isLoading: true,
    showError: false,
    errorMessage: '',
    
    // 设备状态
    deviceConnected: false,
    
    // 多点连接状态
    multipointEnabled: false
  },

  onLoad(options) {
    this.initPage()
  },

  onShow() {
    // 设置 handset 页面的 GAIA 响应回调
    gaiaManager.setOnCommandResponse((commandId, payload, type, vendorId) => {
      console.log('📱 [Handset页面] 收到GAIA响应:', { 
        commandId: `0x${commandId.toString(16).padStart(2, '0')}`, 
        payloadLength: payload.length,
        type,
        vendorId: `0x${vendorId.toString(16).padStart(4, '0')}`
      })
      
      // 处理 Handset Service 相关的命令响应
      if (vendorId === 0x001D) { // QTIL_V3 - Handset Service 命令
        switch (commandId) {
          case 0x00: // ENABLE_MULTIPOINT
            console.log('📱 [Handset页面] 多点连接设置响应')
            // 可以在这里处理多点连接设置的响应
            break
          // 其他 Handset Service 相关命令...
        }
      }
    })
    
    // 检查是否有缓存的多点连接数据
    const cachedMultipointData = wx.getStorageSync('multipointData')
    const multipointFetched = wx.getStorageSync('multipointFetched')
    
    if (cachedMultipointData && multipointFetched) {
      // 使用缓存数据
      console.log('📱 [Handset页面] 使用缓存的多点连接数据:', cachedMultipointData)
      this.processHandsetServiceData(cachedMultipointData)
      this.setData({ 
        deviceConnected: true,
        isLoading: false 
      })
    } else {
      // 首次进入或无缓存：完整获取数据
      this.loadHandsetServiceData()
    }
  },

  onHide() {
    // 清除 handset 页面的 GAIA 响应回调，让其他页面可以设置回调
    gaiaManager.setOnCommandResponse(null)
    
    // 清除多点连接缓存
    this.clearMultipointCache()
  },

  // 初始化页面
  initPage() {
    this.setData({
      isLoading: true,
      showError: false,
      errorMessage: ''
    })
  },

  // 加载Handset Service数据
  async loadHandsetServiceData() {
    try {
      this.setData({ isLoading: true })
      
      // 检查设备连接状态
      const connectedDeviceInfo = wx.getStorageSync('connectedDeviceInfo')
      const lastConnectedDevice = wx.getStorageSync('lastConnectedDevice')
      const isBluetoothConnected = bluetoothManager.isConnected
      
      if (!connectedDeviceInfo || !lastConnectedDevice || !isBluetoothConnected) {
        console.log('设备连接状态检查失败:', {
          connectedDeviceInfo: !!connectedDeviceInfo,
          lastConnectedDevice: !!lastConnectedDevice,
          isBluetoothConnected: isBluetoothConnected
        })
        this.showError('Device not connected')
        return
      }
      
      this.setData({ deviceConnected: true })
      
      // 获取多点连接状态
      console.log('正在获取Handset Service数据...')
      const response = await this.getMultipointType()
      console.log('Handset Service响应:', response)
      
      if (response && response.success) {
        this.processHandsetServiceData(response.data)
      } else {
        // 使用模拟数据作为后备
        console.log('使用模拟Handset Service数据')
        this.processHandsetServiceData({
          multipointType: 'SINGLE_POINT'
        })
      }
      
    } catch (error) {
      console.error('加载Handset Service数据失败:', error)
      // 使用模拟数据作为后备
      this.processHandsetServiceData({
        multipointType: 'SINGLE_POINT'
      })
    } finally {
      this.setData({ isLoading: false })
    }
  },

  // 处理Handset Service数据
  processHandsetServiceData(data) {
    console.log('=== 处理Handset Service数据 ===', data)
    
    const multipointEnabled = data.multipointType === 'MULTI_POINT'
    
    console.log('解析结果:', { multipointEnabled })
    
    this.setData({
      multipointEnabled,
      showError: false
    })
    
    // 缓存多点连接数据
    wx.setStorageSync('multipointData', data)
    wx.setStorageSync('multipointFetched', true)
    console.log('📱 [Handset页面] 多点连接数据已缓存')
  },

  // 获取多点连接类型
  async getMultipointType() {
    try {
      console.log('获取多点连接类型')
      
      // 使用gaiaManager获取多点连接类型
      const response = await gaiaManager.getMultipointType()
      return response
    } catch (error) {
      console.error('获取多点连接类型失败:', error)
      return { success: false, error: error.message }
    }
  },

  // 设置多点连接类型
  async setMultipointType(enabled) {
      // 使用gaiaManager设置多点连接类型
       await gaiaManager.setMultipointType(enabled)
       // 更新本地状态
       this.setData({ multipointEnabled: enabled })
       
       // 更新缓存数据
       const updatedData = {
         multipointType: enabled ? 'MULTI_POINT' : 'SINGLE_POINT'
       }
       wx.setStorageSync('multipointData', updatedData)
       console.log('📱 [Handset页面] 多点连接设置已更新缓存')
       
       wx.showToast({
         title: '设置成功',
         icon: 'success'
       })
  },

  // 多点连接开关变化处理
  onMultipointChange(e) {
    const enabled = e.detail.value
    console.log('多点连接开关变化:', enabled)
    
    // 设置多点连接类型
    this.setMultipointType(enabled)
  },

  // 显示错误
  showError(message) {
    this.setData({
      showError: true,
      errorMessage: message,
      isLoading: false
    })
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadHandsetServiceData().finally(() => {
      wx.stopPullDownRefresh()
    })
  },

  // 清除多点连接缓存
  clearMultipointCache() {
    try {
      // 清除多点连接数据缓存
      wx.removeStorageSync('multipointData')
      wx.removeStorageSync('multipointFetched')
      console.log('📱 [Handset页面] 多点连接缓存已清除')
    } catch (error) {
      console.error('📱 [Handset页面] 清除多点连接缓存失败:', error)
    }
  }
})